📑 目錄
- 1. core aiva core ai engine backup bio neuron core Module
- 2. core aiva core ai engine bio neuron core Module
- 3. core aiva core messaging init Module
- 4. core aiva core messaging message broker Function init
- 5. core aiva core messaging message broker Module
- 6. core aiva core messaging result collector Function init
- 7. core aiva core messaging result collector Function set pending result
- 8. core aiva core messaging result collector Function register handler
- 9. core aiva core messaging result collector Function unregister handler
- 10. core aiva core messaging result collector Module
- 11. core aiva core messaging task dispatcher Function init
- 12. core aiva core messaging task dispatcher Function build message
- 13. core aiva core messaging task dispatcher Function build task payload
- 14. core aiva core messaging task dispatcher Function get topic for tool
- 15. core aiva core messaging task dispatcher Function register callback
- 16. core aiva core messaging task dispatcher Function unregister callback
- 17. core aiva core messaging task dispatcher Module
- 18. core aiva core optimized core Module
1. core aiva core ai engine backup bio neuron core Module
flowchart TB
n1([開始])
n2([結束])
n3['\nBioNeuron Core - 生物啟發式神經網路決策核心\n來源: BioNeu...]
n4[from __future__ import annotations]
n5[import logging]
n6[import time]
n7[from typing import TYPE_CHECKING, Any]
n8[import numpy as np]
n9{if TYPE_CHECKING}
n10[pass]
n11[]
n12[logger = logging.getLogger(__...]
n13[class BiologicalSpikingLayer(...)]
n14[class AntiHallucinationModule(...)]
n15[class ScalableBioNet(...)]
n16[class BioNeuronRAGAgent(...)]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n9
n9 -->|Yes| n10
n9 -->|No| n11
n10 --> n11
n11 --> n12
n12 --> n13
n13 --> n14
n14 --> n15
n15 --> n16
n16 --> n2
flowchart TB
n1([開始])
n2([結束])
n3['\nBioNeuron Core - 生物啟發式神經網路決策核心\n來源: BioNeu...]
n4[from __future__ import annotations]
n5[import logging]
n6[import time]
n7[from typing import TYPE_CHECKING, Any]
n8[import numpy as np]
n9{if TYPE_CHECKING}
n10[pass]
n11[]
n12[logger = logging.getLogger(__...]
n13[class BiologicalSpikingLayer(...)]
n14[class AntiHallucinationModule(...)]
n15[class ScalableBioNet(...)]
n16[class BioNeuronRAGAgent(...)]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n9
n9 -->|Yes| n10
n9 -->|No| n11
n10 --> n11
n11 --> n12
n12 --> n13
n13 --> n14
n14 --> n15
n15 --> n16
n16 --> n2
2. core aiva core ai engine bio neuron core Module
flowchart TB
n1([開始])
n2([結束])
n3['\nBioNeuron Core - 生物啟發式神經網路決策核心\n來源: BioNeu...]
n4[from __future__ import annotations]
n5[import logging]
n6[import time]
n7[from typing import TYPE_CHECKING, Any]
n8[import numpy as np]
n9{if TYPE_CHECKING}
n10[pass]
n11[]
n12[logger = logging.getLogger(__...]
n13[class BiologicalSpikingLayer(...)]
n14[class AntiHallucinationModule(...)]
n15[class ScalableBioNet(...)]
n16[class BioNeuronRAGAgent(...)]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n9
n9 -->|Yes| n10
n9 -->|No| n11
n10 --> n11
n11 --> n12
n12 --> n13
n13 --> n14
n14 --> n15
n15 --> n16
n16 --> n2
flowchart TB
n1([開始])
n2([結束])
n3['\nBioNeuron Core - 生物啟發式神經網路決策核心\n來源: BioNeu...]
n4[from __future__ import annotations]
n5[import logging]
n6[import time]
n7[from typing import TYPE_CHECKING, Any]
n8[import numpy as np]
n9{if TYPE_CHECKING}
n10[pass]
n11[]
n12[logger = logging.getLogger(__...]
n13[class BiologicalSpikingLayer(...)]
n14[class AntiHallucinationModule(...)]
n15[class ScalableBioNet(...)]
n16[class BioNeuronRAGAgent(...)]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n9
n9 -->|Yes| n10
n9 -->|No| n11
n10 --> n11
n11 --> n12
n12 --> n13
n13 --> n14
n14 --> n15
n15 --> n16
n16 --> n2
3. core aiva core messaging init Module
flowchart TB
n1([開始])
n2([結束])
n3['\nMessaging Module - 消息處理模組\n\n負責與各功能模組的消息交互...]
n4[from .message_broker import MessageBroker]
n5[from .result_collector import ResultCollector]
n6[from .task_dispatcher import TaskDispatcher]
n7[__all__ = ['MessageBroker', &...]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n2
flowchart TB
n1([開始])
n2([結束])
n3['\nMessaging Module - 消息處理模組\n\n負責與各功能模組的消息交互...]
n4[from .message_broker import MessageBroker]
n5[from .result_collector import ResultCollector]
n6[from .task_dispatcher import TaskDispatcher]
n7[__all__ = ['MessageBroker', &...]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n2
4. core aiva core messaging message broker Function init
flowchart TB
n1([開始])
n2([結束])
n3['初始化 RPC 客戶端\n\n Args:\n ch...]
n4[self.channel = channel]
n5[self.exchange = exchange]
n6[self.timeout = timeout]
n7[self.futures: dict[str, asyncio.Future] = {&...]
n8[self.callback_queue: AbstractQueue | None = None]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n2
flowchart TB
n1([開始])
n2([結束])
n3['初始化 RPC 客戶端\n\n Args:\n ch...]
n4[self.channel = channel]
n5[self.exchange = exchange]
n6[self.timeout = timeout]
n7[self.futures: dict[str, asyncio.Future] = {&...]
n8[self.callback_queue: AbstractQueue | None = None]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n2
5. core aiva core messaging message broker Module
flowchart TB
n1([開始])
n2([結束])
n3['\nMessage Broker - 消息代理\n\n統一管理 RabbitMQ 連接和...]
n4[from __future__ import annotations]
n5[import asyncio]
n6[from collections.abc import Callable]
n7[from contextlib import suppress]
n8[import json]
n9[import logging]
n10[from typing import Any]
n11[import aio_pika]
n12[from aio_pika.abc import AbstractChannel, Abstract...]
n13[from services.aiva_common.config import get_settin...]
n14[from services.aiva_common.enums import ModuleName]
n15[from services.aiva_common.schemas import AivaMessa...]
n16[logger = logging.getLogger(__...]
n17[class MessageBroker(...)]
n18[class RPCClient(...)]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n9
n9 --> n10
n10 --> n11
n11 --> n12
n12 --> n13
n13 --> n14
n14 --> n15
n15 --> n16
n16 --> n17
n17 --> n18
n18 --> n2
flowchart TB
n1([開始])
n2([結束])
n3['\nMessage Broker - 消息代理\n\n統一管理 RabbitMQ 連接和...]
n4[from __future__ import annotations]
n5[import asyncio]
n6[from collections.abc import Callable]
n7[from contextlib import suppress]
n8[import json]
n9[import logging]
n10[from typing import Any]
n11[import aio_pika]
n12[from aio_pika.abc import AbstractChannel, Abstract...]
n13[from services.aiva_common.config import get_settin...]
n14[from services.aiva_common.enums import ModuleName]
n15[from services.aiva_common.schemas import AivaMessa...]
n16[logger = logging.getLogger(__...]
n17[class MessageBroker(...)]
n18[class RPCClient(...)]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n9
n9 --> n10
n10 --> n11
n11 --> n12
n12 --> n13
n13 --> n14
n14 --> n15
n15 --> n16
n16 --> n17
n17 --> n18
n18 --> n2
6. core aiva core messaging result collector Function init
flowchart TB
n1([開始])
n2([結束])
n3['初始化結果收集器\n\n Args:\n broke...]
n4[self.broker = broker]
n5[self.storage = storage_backend]
n6[self.result_handlers: dict[str, list[Callable]...]
n7[self.pending_results: dict[str, dict[str, Any]...]
n8[logger.info('ResultCollector initialized&...]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n2
flowchart TB
n1([開始])
n2([結束])
n3['初始化結果收集器\n\n Args:\n broke...]
n4[self.broker = broker]
n5[self.storage = storage_backend]
n6[self.result_handlers: dict[str, list[Callable]...]
n7[self.pending_results: dict[str, dict[str, Any]...]
n8[logger.info('ResultCollector initialized&...]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n2
7. core aiva core messaging result collector Function set pending result
flowchart TB
n1([開始])
n2([結束])
n3['設置等待中的結果\n\n Args:\n resul...]
n4[self.pending_results[result_id] = {&#...]
n5[logger.debug(f'Set pending result for ...]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n2
flowchart TB
n1([開始])
n2([結束])
n3['設置等待中的結果\n\n Args:\n resul...]
n4[self.pending_results[result_id] = {&#...]
n5[logger.debug(f'Set pending result for ...]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n2
8. core aiva core messaging result collector Function register handler
flowchart TB
n1([開始])
n2([結束])
n3['註冊結果處理器\n\n Args:\n event_...]
n4{if event_type not in self.resu...}
n5[self.result_handlers[event_type] = []]
n6[]
n7[self.result_handlers[event_type].append(handl...]
n8[logger.debug(f'Registered handler for ...]
n1 --> n3
n3 --> n4
n4 -->|Yes| n5
n4 -->|No| n6
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n2
flowchart TB
n1([開始])
n2([結束])
n3['註冊結果處理器\n\n Args:\n event_...]
n4{if event_type not in self.resu...}
n5[self.result_handlers[event_type] = []]
n6[]
n7[self.result_handlers[event_type].append(handl...]
n8[logger.debug(f'Registered handler for ...]
n1 --> n3
n3 --> n4
n4 -->|Yes| n5
n4 -->|No| n6
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n2
9. core aiva core messaging result collector Function unregister handler
flowchart TB
n1([開始])
n2([結束])
n3['取消註冊處理器\n\n Args:\n event_...]
n4{if event_type in self.result_h...}
n5[try]
n6[self.result_handlers[event_type].remove(handl...]
n7[logger.debug(f'Unregistered handler for &...]
n8[]
n9[except ValueError]
n10[pass]
n11[]
n1 --> n3
n3 --> n4
n4 -->|Yes| n5
n4 -->|No| n11
n5 --> n6
n5 --> n9
n6 --> n7
n7 --> n8
n8 --> n11
n9 --> n10
n10 --> n8
n11 --> n2
flowchart TB
n1([開始])
n2([結束])
n3['取消註冊處理器\n\n Args:\n event_...]
n4{if event_type in self.result_h...}
n5[try]
n6[self.result_handlers[event_type].remove(handl...]
n7[logger.debug(f'Unregistered handler for &...]
n8[]
n9[except ValueError]
n10[pass]
n11[]
n1 --> n3
n3 --> n4
n4 -->|Yes| n5
n4 -->|No| n11
n5 --> n6
n5 --> n9
n6 --> n7
n7 --> n8
n8 --> n11
n9 --> n10
n10 --> n8
n11 --> n2
10. core aiva core messaging result collector Module
flowchart TB
n1([開始])
n2([結束])
n3['\nResult Collector - 結果收集器\n\n接收並處理各功能模組傳回的執...]
n4[from __future__ import annotations]
n5[import asyncio]
n6[from collections.abc import Callable]
n7[from datetime import UTC, datetime]
n8[import json]
n9[import logging]
n10[from typing import Any]
n11[from aio_pika.abc import AbstractIncomingMessage]
n12[from services.aiva_common.schemas import FindingPa...]
n13[from .message_broker import MessageBroker]
n14[logger = logging.getLogger(__...]
n15[class ResultCollector(...)]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n9
n9 --> n10
n10 --> n11
n11 --> n12
n12 --> n13
n13 --> n14
n14 --> n15
n15 --> n2
flowchart TB
n1([開始])
n2([結束])
n3['\nResult Collector - 結果收集器\n\n接收並處理各功能模組傳回的執...]
n4[from __future__ import annotations]
n5[import asyncio]
n6[from collections.abc import Callable]
n7[from datetime import UTC, datetime]
n8[import json]
n9[import logging]
n10[from typing import Any]
n11[from aio_pika.abc import AbstractIncomingMessage]
n12[from services.aiva_common.schemas import FindingPa...]
n13[from .message_broker import MessageBroker]
n14[logger = logging.getLogger(__...]
n15[class ResultCollector(...)]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n9
n9 --> n10
n10 --> n11
n11 --> n12
n12 --> n13
n13 --> n14
n14 --> n15
n15 --> n2
11. core aiva core messaging task dispatcher Function init
flowchart TB
n1([開始])
n2([結束])
n3['初始化任務派發器\n\n Args:\n broke...]
n4[self.broker = broker]
n5[self.module_name = module_name]
n6[self.task_callbacks: dict[str, Callable] = {...]
n7[self.tool_routing_map = {'function_sqli&...]
n8[logger.info('TaskDispatcher initialized&a...]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n2
flowchart TB
n1([開始])
n2([結束])
n3['初始化任務派發器\n\n Args:\n broke...]
n4[self.broker = broker]
n5[self.module_name = module_name]
n6[self.task_callbacks: dict[str, Callable] = {...]
n7[self.tool_routing_map = {'function_sqli&...]
n8[logger.info('TaskDispatcher initialized&a...]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n2
12. core aiva core messaging task dispatcher Function build message
flowchart TB
n1([開始])
n2([結束])
n3['構建 AIVA 消息\n\n Args:\n top...]
n4[header = MessageHeader(messag...]
n5[message = AivaMessage(header=h...]
n6[return message]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n2
flowchart TB
n1([開始])
n2([結束])
n3['構建 AIVA 消息\n\n Args:\n top...]
n4[header = MessageHeader(messag...]
n5[message = AivaMessage(header=h...]
n6[return message]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n2
13. core aiva core messaging task dispatcher Function build task payload
flowchart TB
n1([開始])
n2([結束])
n3['構建功能任務 Payload\n\n Args:\n ...]
n4[target = FunctionTaskTarget(u...]
n5[payload = FunctionTaskPayload(...]
n6[return payload]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n2
flowchart TB
n1([開始])
n2([結束])
n3['構建功能任務 Payload\n\n Args:\n ...]
n4[target = FunctionTaskTarget(u...]
n5[payload = FunctionTaskPayload(...]
n6[return payload]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n2
14. core aiva core messaging task dispatcher Function get topic for tool
flowchart TB
n1([開始])
n2([結束])
n3['根據工具類型獲取對應的 Topic\n\n Args:\n ...]
n4[topic_map = {'function_sqli'...]
n5[return topic_map.get(tool_type, Topic...]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n2
flowchart TB
n1([開始])
n2([結束])
n3['根據工具類型獲取對應的 Topic\n\n Args:\n ...]
n4[topic_map = {'function_sqli'...]
n5[return topic_map.get(tool_type, Topic...]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n2
15. core aiva core messaging task dispatcher Function register callback
flowchart TB
n1([開始])
n2([結束])
n3['註冊任務完成回調\n\n Args:\n task_...]
n4[self.task_callbacks[task_id] = callback]
n5[logger.debug(f'Registered callback for ta...]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n2
flowchart TB
n1([開始])
n2([結束])
n3['註冊任務完成回調\n\n Args:\n task_...]
n4[self.task_callbacks[task_id] = callback]
n5[logger.debug(f'Registered callback for ta...]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n2
16. core aiva core messaging task dispatcher Function unregister callback
flowchart TB
n1([開始])
n2([結束])
n3['取消註冊回調\n\n Args:\n task_id...]
n4{if task_id in self.task_callbacks}
n5[del self.task_callbacks[task_id]]
n6[logger.debug(f'Unregistered callback for ...]
n7[]
n1 --> n3
n3 --> n4
n4 -->|Yes| n5
n4 -->|No| n7
n5 --> n6
n6 --> n7
n7 --> n2
flowchart TB
n1([開始])
n2([結束])
n3['取消註冊回調\n\n Args:\n task_id...]
n4{if task_id in self.task_callbacks}
n5[del self.task_callbacks[task_id]]
n6[logger.debug(f'Unregistered callback for ...]
n7[]
n1 --> n3
n3 --> n4
n4 -->|Yes| n5
n4 -->|No| n7
n5 --> n6
n6 --> n7
n7 --> n2
17. core aiva core messaging task dispatcher Module
flowchart TB
n1([開始])
n2([結束])
n3['\nTask Dispatcher - 任務派發器\n\n負責將攻擊計畫轉換為任務並派發...]
n4[from __future__ import annotations]
n5[import asyncio]
n6[from collections.abc import Callable]
n7[from datetime import UTC, datetime]
n8[import logging]
n9[from typing import Any]
n10[from uuid import uuid4]
n11[from services.aiva_common.schemas import AivaMessa...]
n12[from .message_broker import MessageBroker]
n13[logger = logging.getLogger(__...]
n14[class TaskDispatcher(...)]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n9
n9 --> n10
n10 --> n11
n11 --> n12
n12 --> n13
n13 --> n14
n14 --> n2
flowchart TB
n1([開始])
n2([結束])
n3['\nTask Dispatcher - 任務派發器\n\n負責將攻擊計畫轉換為任務並派發...]
n4[from __future__ import annotations]
n5[import asyncio]
n6[from collections.abc import Callable]
n7[from datetime import UTC, datetime]
n8[import logging]
n9[from typing import Any]
n10[from uuid import uuid4]
n11[from services.aiva_common.schemas import AivaMessa...]
n12[from .message_broker import MessageBroker]
n13[logger = logging.getLogger(__...]
n14[class TaskDispatcher(...)]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n9
n9 --> n10
n10 --> n11
n11 --> n12
n12 --> n13
n13 --> n14
n14 --> n2
18. core aiva core optimized core Module
flowchart TB
n1([開始])
n2([結束])
n3['\nAIVA 自主 AI 核心 - 無需外部 LLM 依賴\n\n🧠 核心特色:\n- ...]
n4[from __future__ import annotations]
n5[import asyncio]
n6[from collections import defaultdict]
n7[from collections.abc import Callable]
n8[from contextlib import asynccontextmanager]
n9[from dataclasses import dataclass]
n10[import gc]
n11[import time]
n12[from typing import Any]
n13[import weakref]
n14[from fastapi import FastAPI]
n15[import numpy as np]
n16[class ParallelMessageProcessor(...)]
n17[class OptimizedBioNet(...)]
n18[class ComponentPool(...)]
n19[class MemoryManager(...)]
n20[class Metric(...)]
n21[class MetricsCollector(...)]
n22[def monitor_performance(...)]
n23[message_processor = ParallelMessageProce...]
n24[optimized_bio_net = OptimizedBioNet(inpu...]
n25[memory_manager = MemoryManager(gc_thr...]
n26[metrics_collector = MetricsCollector()]
n27[component_pools = {'scan_interface&&...]
n28[def optimized_process_scan_results(...)]
n29[def optimized_ai_prediction(...)]
n30[app = FastAPI(title='AIVA ...]
n31[def startup(...)]
n32[def get_metrics(...)]
n33[def health_check(...)]
n34[class AIVAAutonomyProof(...)]
n35[def prove_aiva_independence(...)]
n36{if __name__ == '__main__'}
n37[prove_aiva_independence()]
n38[]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n9
n9 --> n10
n10 --> n11
n11 --> n12
n12 --> n13
n13 --> n14
n14 --> n15
n15 --> n16
n16 --> n17
n17 --> n18
n18 --> n19
n19 --> n20
n20 --> n21
n21 --> n22
n22 --> n23
n23 --> n24
n24 --> n25
n25 --> n26
n26 --> n27
n27 --> n28
n28 --> n29
n29 --> n30
n30 --> n31
n31 --> n32
n32 --> n33
n33 --> n34
n34 --> n35
n35 --> n36
n36 -->|Yes| n37
n36 -->|No| n38
n37 --> n38
n38 --> n2
flowchart TB
n1([開始])
n2([結束])
n3['\nAIVA 自主 AI 核心 - 無需外部 LLM 依賴\n\n🧠 核心特色:\n- ...]
n4[from __future__ import annotations]
n5[import asyncio]
n6[from collections import defaultdict]
n7[from collections.abc import Callable]
n8[from contextlib import asynccontextmanager]
n9[from dataclasses import dataclass]
n10[import gc]
n11[import time]
n12[from typing import Any]
n13[import weakref]
n14[from fastapi import FastAPI]
n15[import numpy as np]
n16[class ParallelMessageProcessor(...)]
n17[class OptimizedBioNet(...)]
n18[class ComponentPool(...)]
n19[class MemoryManager(...)]
n20[class Metric(...)]
n21[class MetricsCollector(...)]
n22[def monitor_performance(...)]
n23[message_processor = ParallelMessageProce...]
n24[optimized_bio_net = OptimizedBioNet(inpu...]
n25[memory_manager = MemoryManager(gc_thr...]
n26[metrics_collector = MetricsCollector()]
n27[component_pools = {'scan_interface&&...]
n28[def optimized_process_scan_results(...)]
n29[def optimized_ai_prediction(...)]
n30[app = FastAPI(title='AIVA ...]
n31[def startup(...)]
n32[def get_metrics(...)]
n33[def health_check(...)]
n34[class AIVAAutonomyProof(...)]
n35[def prove_aiva_independence(...)]
n36{if __name__ == '__main__'}
n37[prove_aiva_independence()]
n38[]
n1 --> n3
n3 --> n4
n4 --> n5
n5 --> n6
n6 --> n7
n7 --> n8
n8 --> n9
n9 --> n10
n10 --> n11
n11 --> n12
n12 --> n13
n13 --> n14
n14 --> n15
n15 --> n16
n16 --> n17
n17 --> n18
n18 --> n19
n19 --> n20
n20 --> n21
n21 --> n22
n22 --> n23
n23 --> n24
n24 --> n25
n25 --> n26
n26 --> n27
n27 --> n28
n28 --> n29
n29 --> n30
n30 --> n31
n31 --> n32
n32 --> n33
n33 --> n34
n34 --> n35
n35 --> n36
n36 -->|Yes| n37
n36 -->|No| n38
n37 --> n38
n38 --> n2